﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CBE.Model.Entities;

namespace CBE.Model
{
    public class AdministrarProductosDataAccess : GenericEntityManagerDataAccess<Productos, AdministrarProductosCriteria, AdministrarProductosView, CBEEntities>
    {

        /// <summary>
        /// este se usa para modificación y consulta.
        /// </summary>
        /// <param name="id"></param>
        /// <returns>
        /// Devuelve un producto
        /// </returns>
        protected override Productos ReadEntity(Guid id)
        {
            //estas 3 lineas acceden a la base de datos:
            //primero: define cual objeto se accede
            return ObjectContext.Productos.
                   //condición:
                   Where(producto => producto.ID_Producto == id).
                   //devuelve el primero:
                   FirstOrDefault();
        }

        public override List<AdministrarProductosView> Read(AdministrarProductosCriteria criteria)
        {
            return ObjectContext.Productos.
                Include("Proveedores").
                Where(producto => (String.IsNullOrEmpty(criteria.Codigo) || producto.Codigo.Contains(criteria.Codigo)) &&
                                 (String.IsNullOrEmpty(criteria.Nombre) || producto.Descripcion.Contains(criteria.Nombre))).
                Select(producto => new AdministrarProductosView
                {
                    ID = producto.ID_Producto,
                    Codigo = producto.Codigo,
                    Nombre = producto.Descripcion,
                    ImporteUnitario = producto.PrecioUnitario,
                    NombreProveedor = producto.Proveedores.RazonSocial,
                    Stock = producto.Stock
                }).OrderBy(p => p.Codigo).ToList();
        }
    }
}
